﻿#pragma once
#include "study09.h"

// C/C++ 标准库学习网站：https://legacy.cplusplus.com
// C/C++ 微软(Visual Studio)中文学习网站：https://learn.microsoft.com/zh-cn/cpp/cpp/?view=msvc-170

/*
因为本项目设置了预编译头文件 "类型关联标头.h"，所以这里必须包含该头文件；
    且每个源文件（.h 和.cpp）都必须包含 "类型关联标头.h" 头文件。
*/

struct Vector2 {
    int a, b;
    Vector2()
        : a(0), b(0) {
    }

    Vector2(int oa, int ob)
        : a(oa), b(ob) {
    }
};

using namespace std::chrono; // 命名空间声明
class Timer {
private:
    time_point<high_resolution_clock> start_time_pointer;
    const char* info;
public:
    Timer()
        : info(nullptr) {
        start_time_pointer = high_resolution_clock::now(); // 当前时间
    }

    Timer(const char* info_str)
        : info(info_str) {
        start_time_pointer = high_resolution_clock::now(); // 当前时间
    }

    void reset_info(const char* new_info_str) { info = new_info_str; }

    void elapsed_time() {
        auto end_time_pointer = high_resolution_clock::now();
        //auto start_time = time_point_cast<microseconds>(start_time_pointer).time_since_epoch().count();
            // 转换起始时间，微秒级
        auto duration = duration_cast<microseconds>(end_time_pointer - start_time_pointer);
        // 计算时间差，微秒级
        if (!info)
            std::cout << "Elapsed time: " << duration.count() << " microseconds" << std::endl;
        else
            std::cout << info << " elapsed time: " << duration.count()
            << " microseconds" << std::endl;
    }

    ~Timer() { elapsed_time(); }
};

/*void test_loop_add() {
    Timer timer;
    long long sum = 0;
    for (size_t i = 0; i < 4000000000; i++) {
        sum += 2;
    } // 通过调试->转到反汇编; 可以看到在 Release 模式下并不进行实际的加法循环运算，而是直接返回结果
    __debugbreak(); // 调试断点函数调用，可用于 Release 调试
    std::cout << "sum: " << sum << std::endl;
} */

extern void test_virtual_destructor();
extern void test_type_conversion();

extern void test_smart_pointer();

//extern void test_loop_add();